package com.wfm.queues;

import java.util.concurrent.ConcurrentLinkedQueue;

public class ConcurrentLinkedQueueExample {
    public static void main(String[] args) throws InterruptedException {
        // 创建一个无界的 ConcurrentLinkedQueue
        ConcurrentLinkedQueue<Integer> queue = new ConcurrentLinkedQueue<>();

        // 生产者线程
        Thread producer = new Thread(() -> {
            for (int i = 1; i <= 5; i++) {
                System.out.println("生产者放入: " + i);
                queue.offer(i); // 非阻塞地将元素添加到队列中
            }
        });

        // 消费者线程
        Thread consumer = new Thread(() -> {
            while (true) {
                Integer value = queue.poll(); // 非阻塞地从队列中取出元素
                if (value != null) {
                    System.out.println("消费者取出: " + value);
                } else {
                    // 如果队列为空，稍作等待后继续尝试
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();
                    }
                }
            }
        });

        // 启动线程
        producer.start();
        consumer.start();

        // 等待生产者完成
        producer.join();

        // 让消费者运行一段时间后退出
        Thread.sleep(3000);
        consumer.interrupt();
    }
}